"""
MCP Management API 主入口文件。

该文件负责以下核心任务：
1. 初始化数据库表结构。
2. 创建并配置 FastAPI 应用实例。
3. 包含来自其他模块的 API 路由。
"""
import time
import logging
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from api import tools
from db.session import engine
from models import tool
from sqlalchemy.exc import OperationalError

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 数据库连接重试逻辑
def create_tables_with_retry(max_retries=30, delay=2):
    """
    尝试创建数据库表，如果失败则重试
    """
    for attempt in range(max_retries):
        try:
            logger.info(f"尝试连接数据库并创建表 (尝试 {attempt + 1}/{max_retries})")
            tool.Base.metadata.create_all(bind=engine)
            logger.info("数据库表创建成功")
            return
        except OperationalError as e:
            if attempt < max_retries - 1:
                logger.warning(f"数据库连接失败，{delay}秒后重试: {e}")
                time.sleep(delay)
            else:
                logger.error(f"数据库连接失败，已达到最大重试次数: {e}")
                raise

# 在应用启动时，根据定义的模型在数据库中创建所有必要的表。
# 注意：在生产环境中，通常会使用 Alembic 等迁移工具来管理数据库模式变更。
create_tables_with_retry()

app = FastAPI(
    title="MCP Management API",
    description="一个用于管理 MCP 工具的 API，构建于 mcp-link 之上。",
    version="1.0.0"
)

# 配置 CORS
origins = [
    "http://localhost:5174", # Vue dev server
    "http://localhost:3000", # Nginx server for production build
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


# 包含来自 api/tools.py 的路由，并为其添加 /api/v1 前缀
app.include_router(tools.router, prefix="/api/v1", tags=["Tools"])

@app.get("/")
def read_root():
    """
    根路径端点，用于简单的服务健康检查。
    """
    return {"message": "Welcome to the MCP Management API"}
